#pragma once
#include <deque>
using namespace std;
namespace zh
{
	template <class T, class Container = deque<T> >
	class stack
	{
	public:
		stack()
		{ }

		bool empty() const
		{
			return con.empty();
		}

		size_t size() const
		{
			return con.size();
		}

		T& top()
		{
			return con.back();
		}
		const T& top() const
		{
			return con.back();
		}

		void push(const T& val)
		{
			con.push_back(val);
		}

		void pop()
		{
			con.pop_back();
		}

		void swap(stack& x)
		{
			con.swap(x.con);
		}

	private:
		Container con;
	};
}
